package com.example.mybatisdemo.service;

import com.example.mybatisdemo.dao.ItemsDao;
import com.example.mybatisdemo.entity.Items;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

import java.util.List;
/**
 * 商品表 商品信息相关表：分类表，商品图片表，商品规格表，商品参数表(Items)表服务接口
 *
 * @author 敲代码的卡卡罗特  公众号：干货食堂
 * @since 2020-05-12 22:53:11
 */
public interface ItemsService {
    /**
     * 从service获取dao，进行通用的crud。若service一次需要多个dao执行，
     * 可在serviceImpl方法上使用 @Transactional 事务注解
     */
    ItemsDao getItemsDao();

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    Items getById(String id);

    /**
     * 通过实体不为空的属性作为筛选条件查询单个
     *
     * @param items 实例对象
     * @return 对象列表
     */
    Items getByEntity(Items items);

    /**
     * 通过实体不为空的属性作为筛选条件查询
     *
     * @param items 实例对象
     * @return 对象列表
     */
    List<Items> listByEntity(Items items);

    /**
     * 通过实体不为空的属性作为or like筛选条件查询
     *
     * @param items 实例对象
     * @return 对象列表
     */
    List<Items> listByEntityLike(Items items);

    /**
     * 通过Id列表作为条件查询列表
     *
     * @param ids
     * @return 对象列表
     */
    List<Items> listByIds(List<String> ids);

    /**
     * 新增实体属性不为null的列
     *
     * @param items 实例对象
     * @return 影响行数
     */
    int insert(Items items);

    /**
     * 批量新增所有列，列表长度不能为0，且列表id统一为null或者统一不为null
     *
     * @param list 实例对象list集合
     * @return 影响行数
     */
    int insertBatch(List<Items> list);

    /**
     * 通过主键修改实体属性不为null的列
     *
     * @param items 实例对象
     * @return 影响行数
     */
    int update(Items items);

    /**
     * 通过主键修改实体列表，列表长度不能为0
     * 注意：当实体属性为null时，对应的列也会别更新为null
     *
     * @param list 实例对象
     * @return 影响行数
     */
    int updateBatch(List<Items> list);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(String id);

    /**
     * 通过实体非空属性批量删除
     *
     * @param items 实体
     * @return 影响行数
     */
    int deleteByEntity(Items items);

    /**
     * 通过主键列表删除，列表长度不能为0
     *
     * @param list 主键列表
     * @return 影响行数
     */
    int deleteByIds(List<String> list);

    /**
     * 获取整张表的行数
     * @return 统计行数
     */
    int countAll();

    /**
     * 通过实体不为空的属性作为筛选条件查询行数
     * @param items 实体
     * @return 统计行数
     */
    int countByEntity(Items items);

    /**
     * 分页查询
     * @param currentPage
     * @param pageSize
     * @return
     */
    PageInfo<Items> findPage(int currentPage, int pageSize);
}
